/*
 * Copyright (c) 2010 Curtis Boyden.  All rights reserved. 
 * This software was developed by Curtis Boyden and is provided under the terms 
 * of the GNU Lesser General Public License, Version 2.1. You may not use 
 * this file except in compliance with the license. If you need a copy of the license, 
 * please go to http://www.gnu.org/licenses/lgpl-2.1.txt. The Original Code is ejMud
 * (Ewerp Java MUD).  The Initial Developer is Curtis Boyden.
 *
 * Software distributed under the GNU Lesser Public License is distributed on an "AS IS" 
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or  implied. Please refer to 
 * the license for the specific language governing your rights and limitations.
*/

package com.ewerp.mud.core.persistence;

import java.util.Arrays;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.ewerp.mud.core.lifecycle.ILifecycleListener;
import com.ewerp.mud.core.plugin.AbstractPlugin;

public class EwerpHibernatePersistence extends AbstractPlugin implements IPersistenceManager, ILifecycleListener {
    private static final EwerpHibernatePersistence instance = new EwerpHibernatePersistence();
    
    protected SessionFactory sessionFactory;
    
    public static final EwerpHibernatePersistence getInstance() {
        return instance;
    }
    
    protected EwerpHibernatePersistence() {
    }
    
    @Override
    public List<Class<?>> getInterfaces() {
        return Arrays.asList(new Class<?>[] {IPersistenceManager.class});
    }

    @Override
    public void init() {
    }

    @Override
    public void start() {
        sessionFactory = new Configuration().configure().buildSessionFactory();
    }

    @Override
    public void stop() {
        if(!sessionFactory.isClosed()) {
            sessionFactory.close();
        }
    }

    @Override
    public IPersistenceSession openSession() {
        return new EwerpHibernateSession(sessionFactory.openSession());
    }

}
